import pyperclip
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QTextEdit
from PyQt5.QtGui import QFont

class IPConverterTab(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()

        font = QFont()
        font.setPointSize(12)  # 设置字体大小

        self.description_label = QLabel('说明: 该工具可以进行IP地址、整数和IP掩码之间的转换。')
        self.description_label.setFont(font)
        layout.addWidget(self.description_label)

        self.input_label = QLabel('输入: (IP地址或整数)')
        self.input_label.setFont(font)
        layout.addWidget(self.input_label)

        self.input_entry = QLineEdit(self)
        self.input_entry.setFont(font)
        self.input_entry.textChanged.connect(self.convert_ip)  # 当输入框内容变化时，自动进行转换
        layout.addWidget(self.input_entry)

        self.mask_label = QLabel('输入掩码: (CIDR格式，如24)')
        self.mask_label.setFont(font)
        layout.addWidget(self.mask_label)

        self.mask_entry = QLineEdit(self)
        self.mask_entry.setFont(font)
        self.mask_entry.textChanged.connect(self.convert_mask)  # 当输入框内容变化时，自动进行转换
        layout.addWidget(self.mask_entry)

        self.paste_button = QPushButton('粘贴', self)
        self.paste_button.setFont(font)
        self.paste_button.clicked.connect(self.paste_text)
        layout.addWidget(self.paste_button)

        self.clear_button = QPushButton('清空', self)
        self.clear_button.setFont(font)
        self.clear_button.clicked.connect(self.clear_text)
        layout.addWidget(self.clear_button)

        self.result_label = QLabel('结果:')
        self.result_label.setFont(font)
        layout.addWidget(self.result_label)

        self.result_text = QTextEdit(self)
        self.result_text.setFont(font)
        self.result_text.setReadOnly(True)
        layout.addWidget(self.result_text)

        self.copy_button = QPushButton('复制结果', self)
        self.copy_button.setFont(font)
        self.copy_button.clicked.connect(self.copy_result)
        layout.addWidget(self.copy_button)

        self.setLayout(layout)

    def paste_text(self):
        self.input_entry.setText(pyperclip.paste())

    def convert_ip(self):
        input_text = self.input_entry.text()
        try:
            if '.' in input_text:  # 输入是IP地址
                parts = input_text.split('.')
                if len(parts) == 4:
                    num = (int(parts[0]) << 24) + (int(parts[1]) << 16) + (int(parts[2]) << 8) + int(parts[3])
                    self.result_text.setText(f"整数: {num}")
                else:
                    self.result_text.setText("输入无效，请输入有效的IP地址。")
            else:  # 输入是整数
                num = int(input_text)
                ip = f"{(num >> 24) & 0xFF}.{(num >> 16) & 0xFF}.{(num >> 8) & 0xFF}.{num & 0xFF}"
                self.result_text.setText(f"IP地址: {ip}")
        except ValueError:
            self.result_text.setText("输入无效，请输入有效的IP地址或整数。")

    def convert_mask(self):
        mask_text = self.mask_entry.text()
        try:
            cidr = int(mask_text)
            if 0 <= cidr <= 32:
                mask = (0xFFFFFFFF >> (32 - cidr)) << (32 - cidr)
                ip_mask = f"{(mask >> 24) & 0xFF}.{(mask >> 16) & 0xFF}.{(mask >> 8) & 0xFF}.{mask & 0xFF}"
                self.result_text.append(f"掩码: {ip_mask}")
            else:
                self.result_text.setText("输入无效，请输入有效的CIDR值（0-32）。")
        except ValueError:
            self.result_text.setText("输入无效，请输入有效的CIDR值（0-32）。")

    def copy_result(self):
        pyperclip.copy(self.result_text.toPlainText())

    def clear_text(self):
        self.input_entry.clear()
        self.mask_entry.clear()
        self.result_text.clear()